Ö INN einrichten
| | | |
| Blog | Sitemap | Suchen | Webmaster |

Volltextsuche

(mind. 4 Zeichen)

Der eigene Newsserver

INN installieren und konfigurieren

(Dokument als PDF)

Der Wegfall von news.individual.net als kostenloser Server für USENET News mag den einen oder anderen Benutzer des Servers motiviert haben, sich selber mit News zu versorgen. Dieser Text soll dabei helfen, etwa auf einem der üblichen Dedicated Server bei einem Hoster oder an einer anderen geeigneten Stelle im Netz einen eigenen INN als News-Server aufzusetzen und so zu konfigurieren, daß er ein nützlicher Teil der USENET-Infrastruktur in Deutschland ist und daß einige Benutzer dort News lesen können.

Inhaltsverzeichnis

Ressourcenplanung 1
Installation 2
Inbetriebnahme 2
Gruppen anlegen 6
Zugangskontrolle konfigurieren 7
Verbindungen (Feeds) konfigurieren 8

Ressourcenplanung

Traffic

Die Gruppen im deutschsprachigen Teil des USENET haben das Prefix de.*. Lediglich im Teil de.alt.dateien.* dürfen Bild- und Programmdateien veröffentlicht werden und so kommt es, daß sich das Verkehrsaufkommen im Restteil de.*,!de.alt.dateien.* in recht engen Grenzen hält: Pro Tag sind etwa 20 MB Traffic einzuplanen. Internationale Gruppen können ein Verkehrsaufkommen zwischen 150 und 200 MB am Tag erzeugen.

Die Maschine, auf der INN-Server laufen soll, sollte eine feste IP-Nummer haben, die unterbrechungsfrei verfügbar ist. Es sind Setups denkbar, in denen einer der beiden am Austausch beteiligten Partner eine wechselnde oder nur mit Unterbrechungen verfügbare Adresse hat, aber diese sind nicht Gegenstand dieser Dokumentation.

RAM- und Festplattenbedarf

Ein laufender innd auf einem Intel-basierenden Suse-Linux-System verbraucht 12 MB RAM für den innd, den eigentlichen Newsserver. Außerdem werden noch ein innfeed-Prozeß (2 MB RAM) zur Artikelweitergabe und einige Hilfsprozesse für statistische Zwecke und zur Ausführung von Wartungsarbeiten gestartet. Alles in allem werden 25-30 MB RAM verbraucht.

Die Speicherung der Artikel erfolgt am günstigsten in sogenannten CNFS Cyclebuffs. Dabei handelt es sich um Ringpuffer-Dateien fester Größe, sodaß der Speicherbedarf für Artikel auf der Festplatte konstant ist. Die Installation des Autors hat jeweils ein halbes Gigabyte für de.*,!de.alt.dateien.* und für regionale deutschsprachige Hierarchien reserviert. Drei Gigabyte sind für internationale Artikel aus den Big8-Hierarchien bereitgestellt.

INN muß für lesenden Zugriff auf die Artikel eine Overview-Datenbank pflegen. Diese belegt etwa 10% des Speichers, der für Artikel belegt wird, zusätzlich.

Weitere Anforderungen

Der CPU-Aufwand und die IO-Last auf dem Server des Autors sind vernachlässigbar. Dazu trägt die Verwendung von CNFS ganz erheblich bei.

NNTP und NNRP, die Protokolle zum Übertragen von News und zum Lesen von News, verwenden standardmäßig den Port 119/TCP.

Der Autor verwendet Suse Linux 9.1 als Grundlage für diese Installation. Sie ist jedoch auf allen Linux-Distributionen grundsätzlich ähnlich.

Installation

Suse Linux 9.1 liefert im Paket inn einen INN in der Version 2.4.1. Dies ist relativ aktuell. Nach der Installation befinden sich die Konfigurationsdateien in /etc/news, die öffentlichen Programme in /usr/bin, die nichtöffentlichen Programme in /usr/lib/news/bin, einige wichtige Arbeitsdateien in /var/lib/news und der Artikelspeicher wird in /var/spool/news angelegt. INN wird nach /var/log/news loggen.

Andere Distributionen verwenden möglicherweise leicht unterschiedliche Speicherorte, die Anleitung ist dann passend abzuwandeln.

Alle Konfiguration am INN ist immer als User “news” durchzuführen und niemals als User “root”, außer dies wird ausdrücklich gesagt. Sobald durch Änderungen als “root” Konfigurations-, Log- oder andere Dateien einem anderen Benutzer als “news” gehören, wird INN möglicherweise nicht mehr sauber funktionieren.

Rahmen1
Man muß also als “root” das Kommando “su – news” (“su”, Leerzeichen, “Minus”, Leerzeichen, “news”) eingeben, um auf den Useraccount von “news” zu wechseln und auch das Environment des “news”-Users zu bekommen. Danach befindet man sich dann auch gleich im Homeverzeichnis des News-Users. In SuSE Linux ist das “/etc/news”, wo sich auch die im folgenden beschriebenen Konfigurationsdateien befinden.

Inbetriebnahme

Artikelspeicher bereit stellen

In unserer Beispielinstallation soll der INN mit einem Artikelspeicher in CNFS (“Cyclic News File System”) betrieben werden, weil dies die ressourcensparendste und wartungsärmste Art der Artikelspeicherung ist. Die CNFS-Puffer müssen konfiguriert und angelegt werden.

Versäumt man das, verwendet INN den in der Default-Konfiguration definierten Traditional Spool. Dieser erzeugt jedoch mehr I/O-Last auf dem System und ist in der Größe variabel. Dafür steht sein Inhalt Skripten leichter zu Verfügung: Artikel werden als Dateien unterhalb von /var/spool/news/articles/ in Verzeichnissen abgelegt, die aus dem Namen der Newsgroup abgeleitet sind und müssen durch einen Aufräumjob (“expire”) von dort gelöscht werden. Die Verwendung von Traditional Spool ist nicht empfohlen, insbesondere nicht für INN Neueinsteiger.

Rahmen2
Die Puffer werden in der Datei “cycbuff.conf” definiert. Eine Pufferdefinition besteht aus einer oder mehreren Zeilen, von denen jede einen “cycbuff” definiert. Diese Puffer müssen dann zu einem “metacycbuff” zusammengeklebt werden, damit sie durch den INN benutzbar werden.

Leider ist INN bei der Benennung der “cycbuff” und “metacycbuff” sehr eingeschränkt: Namen müssen kurz sein und dürfen nur aus Zahlen und Buchstaben bestehen.

Im Beispiel wird ein “cycbuff” mit dem Namen “DE1” definiert, der 524288 KB (512 MB) groß sein soll. Die Location im Dateisystem für diesen Puffer ist /var/spool/news/cycbuffs/file_de.1. Dort muß diese Datei auch angelegt werden. Dies erfolgt mit dem Kommando “dd”.

Rahmen3
INN selber arbeitet immer nur mit “metacycbuffs”. Ein “metacycbuff” faßt dabei einen oder mehrere einzelne “cycbuff” zu einer für den INN benutzbaren Einheit zusammen. Der “metacycbuff” DE besteht dabei ausschließlich aus dem einzelnen cycbuff “DE1”.

Das Beispiel definiert außerdem noch sechs jeweils 512 MB umfassende cycbuffs INTL1 bis INTL6. Auch diese müssen mit entsprechenden “dd”-Kommandos angelegt werden und können dann alle zusammen zu einem “metacycbuff” INTL mit 3 GB Gesamtgröße zusammengefaßt werden.

Damit INN weiß, welche Artikel in welchem Puffer abgelegt werden sollen, müssen in der storage.conf entsprechende Einträge gemacht werden.

Rahmen4
Die Zeile “newsgroups” legt dabei fest, welche Gruppen in welchem Puffer abgelegt werden. Die Zeile “class” ist eine eindeutige Nummer für jeden Eintrag, damit man an anderer Stelle auf den Eintrag Bezug nehmen kann. Die Zeile “options” legt für CNFS-Einträge fest, welcher “metacycbuff” Speicher für den entsprechenden Eintrag bereitstellen soll.

Im Beispiel wandern Artikel für die Newsgroups “de.*” immer in den CNFS-Speicher “DE” mit der eindeutigen Nummer 3. Alle anderen Artikel wandern in den CNFS-Speicher “INTL” mit der Nummer 2.

Der Eintrag 1 definiert einen Speicher im Format tradspool. Er wird niemals verwendet, weil der Eintrag 2 vorher alle Artikel abfängt. Der Eintrag 1 ist der (nicht empfohlene, aber rückwärtskompatible) Default-Eintrag in der storage.conf von INN.

Sobald INN erst einmal gestartet ist (siehe unten), werden die Puffer initialisiert. Zu einem späteren Zeitpunkt kann man dann mit dem Kommando “cnfsstat -a” ansehen, wie ausgelastet die Puffer sind.

Grundkonfiguration INN

Vor dem ersten Start des Servers ist die /etc/news/inn.conf anzupassen.

Zu ändern sind:

Rahmen5
Definiert den Inhalt der Zeile “Organization”, die Bestandteil eines jeden Artikels ist.

Rahmen6
Definiert, was Deine Site in den Path-Header einträgt. Dies ist ein sehr wichtiges Datum für das Peering mit anderen Sites. Es sollte Dein Domainname sein, oder ein vom Domainnamen abgeleiteter Name wie “news.koehntopp.de” für “koehntopp.de”.

Mit Hilfe des “pathhost” erkennt ein entfernter Server, ob ein bestimmter Artikel schon einmal Dein System passiert hat. Wenn ja, wird Dir der Artikel kein zweites Mal angeboten. Dies kann sehr viel Traffic einsparen, wenn man mehrere Feeds für eine Hierarchie hat.

Rahmen7
Definiert den Inhalt der Headerzeile “X-Complaints-To” und die Domain, mit deren Hilfe Usernamen zu Mailadressen komplettiert werden, wenn dies notwendig ist.

Rahmen8
Dieser Eintrag ist optional. Wenn man jedoch später statistische Auswertungen auf dem System für den Betrieb plant, sollten laufende Meßdaten für die Auslastung der CNFS-Puffer vorliegen. Dazu muß dieser Eintrag aktiv geschaltet sein.

Crontab aufsetzen

INN muß in regelmäßigen Abständen einige Wartungsaufgaben erledigen. Daher sollte für den User “news” eine Crontab wie die folgende definiert sein:

Rahmen9
Die Crontab enthält nur die für den Betrieb unmittelbar notwendigen Einträge in aktivierter Form. Die auskommentierten Einträge sind für spätere Erweiterungen notwendig oder nützlich.

Der Eintrag “news.daily” führt die zum Betrieb von INN notwendigen Wartungsaufgaben durch. Er muß einmal pro Tag ausgeführt werden.

Der Eintrag “rnews- U” kann einmal pro Stunde ausgeführt werden. Er dient dazu, während Betriebspausen aufgelaufene Artikel nachträglich ins System einzuspeisen.

Die beiden Einträge “inpaths!” und “sendinpaths” sind nur notwendig, wenn das System Statistikdaten in die “Top 1000 der Newsserver” einspielen will. Damit das funktioniert sind jedoch noch weitere Konfigurationen notwendig (siehe unten).

Der Eintrag “scanlogs norotate” dient dazu, stündlich den Statistikreport für das laufende System zu aktualisieren. Damit das funktioniert sind jedoch noch weitere Konfigurationen notwendig (siehe unten).

Server hochfahren

Mit der angegebenen Konfiguration sollte der INN durch den Systemadministrator startbar sein.

Rahmen10
Das Kommando “chkconfig inn on” sorgt dafür, daß beim Systemstart automatisch auch der INN mit hochgefahren wird.

Das Kommando “rcinn start” fährt den Server manuell hoch. Der Server sollte Startmeldungen in /var/log/news/news.notice hinterlassen und in der Prozeßliste sollte ein Prozeß “innd” erkennbar sein, der mit den Rechten des Users “news” ausgeführt wird. Mit “lsof -i -P” sollte dieser Prozeß auf Port 119 lauschen. Von localhost aus kann man jetzt einen Testconnect gegen den NNTP-Port machen.

Rahmen11
Wenn das funktioniert, ist der Server erfolgreich grundkonfiguriert und hochgefahren.

Gruppen anlegen

Testgruppe einrichten

Der Server läuft nun und hat einige Standard-Newsgroups, die für die interne Verwaltung des Servers notwendig sind. Um die weitere Funktion des Servers zu testen, ist es notwendig, mindestens eine lokale Testgruppe anzulegen.

Rahmen12
Andere Gruppen einrichten

Die anderen benötigten Gruppen kann man leicht anlegen, indem man sich eine Liste der Gruppen beim zukünftigen Upstream-Server abholt und sie in Kommandos zur Gruppeneinrichtung umwandelt.

Rahmen21
Das Kommando getlist holt die Liste der aktiven Gruppen vom Server news.koehntopp.de ab und legt sie in der Datei active.news.koehntopp.de ab. Durch das grep-Kommando werden aus dieser Datei alle Gruppen der Hierarchie de.* extrahiert. Für die Einrichtung der Gruppen sind nur das erste und vierte Feld einer jeden Zeile notwendig. Mit dem awk-Kommando ziehen wir also diese Felder aus der Datei heraus und wandeln sie in “ctlinnd”-Kommandos um.

Rahmen22
Die Datei “einrichten.sh” enthält nun die benötigten Kommandos zur Gruppeneinrichtung. Die Ausführung der Datei ist sehr viel schneller, wenn man den Server vor der Ausführung der Kommandos in einen Standby-Modus schaltet und danach wieder in Produktivmodus versetzt.

Zugangskontrolle konfigurieren

Mit den Default-Einstellungen kann man jetzt schon lokal (von localhost aus) gegen den Server connecten. Um Connects von außen zu erlauben, ist es notwendig, einen Anmeldemechanismus und eine Paßwortquelle zu konfigurieren.

INN verwendet intern ein Programm namens “ckpasswd” für die Zugangskontrolle. Dieses Programm kann entweder auf eine lokale Paßwortdatei zugreifen, in der INN-spezifische Paßworte konfiguriert werden, oder man kann es mit Privilegien austatten, die ihm erlauben, auf die Systempaßwortdatei zuzugreifen. Letzteres ist nicht empfohlen, da NNTP ohne weitere Maßnahmen Paßworte im Klartext überträgt.

Rahmen13
Welche Authentisierungsmechanismen in welcher Reihenfolge von INN verwendet werden, wird in der readers.conf festgelegt. Die folgenden Einträge legen fest, daß INN die Datei /etc/news/passwd.nnrp verwenden soll, um Logins zu gestatten. Die Datei hat dasselbe Format wie eine htpasswd-Datei von Apache und kann mit dem Apache-Programm htpasswd angelegt und verwaltet werden.

Der Abschnitt auth legt fest, mit welchem Kommando die Anmeldeinformationen geprüft werden sollen, der Abschnitt access legt dann fest, welche Zugriffsrechte diese Benutzer erhalten sollen.

Wenn alles funktioniert, ist nun eine Anmeldung mit Benutzername und Paßwort von entfernten Systemen möglich.

Verbindungen (Feeds) konfigurieren

Ein Feed ist eine Verbindung zwischen zwei Newsservern, über die gegenseitig Artikel in bestimmten Newsgroups austauschen. Der Feed besteht aus einer eingehenden Verbindung, die in der incoming.conf konfiguriert wird und einer ausgehenden Verbindung, die in der innfeed.conf definiert wird, und für die in der newsfeeds festgelegt wird, welche Dateien gesendet werden sollen.

In der incoming.conf wird festgelegt, welche entfernten Server dem eigenen Server Daten senden dürfen und welche Gruppen diese Server beschicken dürfen:

Rahmen14
Ein solcher Eintrag gestattet dem entfernten Rechner “koehntopp.de” bis zu 5 parallele Verbindungen zu dem eigenen Server aufzubauen, über die er Artikel ausschließlich in die genannten Gruppen einliefern darf.

Ausgehende Verbindungen werden in die innfeed.conf eingetragen. Analog zur incoming.conf muß dort ein Link für eine ausgehende Verbindung konfiguriert werden.

Rahmen15
Schließlich wird in der Datei newsfeeds festgelegt, welche Daten über die ausgehende Verbindung gesendet werden sollen.

Rahmen16

Die Bestellung für den Channel koehntopp-all aus dem Beispiel liest sich “keine Artikel, die koehntopp.de” im Path haben (“/koehntopp.de”). Das Pattern legt fest, welche Newsgruppen über den Kanal gesendet werden sollen. Es liest sich !* ("nix, gar nix"), @* (auch keine Crossposts, das ist doppelt gemoppelt), de.*,!de.alt.dateien.* (alle de-Gruppen außer de.alt.dateien.*), jedoch keine Artikel mit der Distribution: local. Die Flags und der Kanalname legen fest, daß die Daten über den Kanal innfeed! herausgesendet werden sollen.

Deswegen muß der vordefinierte innfeed!-Kanal in der Datei newsfeeds aktiviert werden.

Rahmen17
Außerdem muß das System Steuernachrichten zur Einrichtung neuer Gruppen, zum Löschen von Artikeln usw. verarbeiten können. Dazu ist die Aktivierung des Controlchan notwendig.

Rahmen18
Um die Änderungen wirksam werden zu lassen, muß dem INN-Server ein “reload”-Kommando gesendet werden.

Rahmen19
Rahmen20
Wenn alles funktioniert hat, ist das Link jetzt sichtbar und kann mit “lsof” oder “tail -f /var/log/news/news /var/log/news/news.notice” gesehen werden.